home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / NOFLICKE / MBAREVEN.C1 next >
Text File  |  1990-12-27  |  3KB  |  160 lines

  1. #include <EventMgr.h>
  2. #include <MenuMgr.h>
  3. #include <WindowMgr.h>
  4.  
  5. extern Boolean WNEIsImplemented;
  6. extern Boolean Suspended;
  7. extern Boolean editEnabled;
  8. extern MenuHandle EditMenu;
  9.  
  10. #define suspResEvt        0x01        /* Suspend/Resume event */
  11. #define osEvent            app4Evt        /* event used by MultiFinder */
  12. #define suspendMask        0x00000001    /* suspend event mask */
  13.  
  14. #ifndef NULL
  15. #define NULL    0
  16. #endif
  17.  
  18. void EventLoop (void);
  19. void DoUpdate (WindowPtr);
  20. void DoActivate (WindowPtr, Boolean);
  21.  
  22. void EventLoop ()
  23. {
  24.     EventRecord evt;
  25.     GrafPtr evtPort;
  26.     short evtPart;
  27.     
  28.     SystemTask ();
  29.     if (WNEIsImplemented)
  30.         WaitNextEvent (everyEvent, &evt, Suspended ? 10 : 0, NULL);
  31.     
  32.     else
  33.         GetNextEvent (everyEvent, &evt);
  34.     
  35.     switch (evt.what) {
  36.         case nullEvent: {
  37.             WindowPtr fWPtr = FrontWindow ();
  38.             
  39.             if (!fWPtr) {
  40.                 if (editEnabled) {
  41.                     DisableItem (EditMenu, 0);
  42.                     editEnabled = false;
  43.                     DrawMenuBar ();
  44.                 }
  45.             }
  46.             
  47.             else if (((WindowPeek) fWPtr)->windowKind < 0) {
  48.                 if (!editEnabled) {
  49.                     EnableItem (EditMenu, 0);
  50.                     editEnabled = true;
  51.                     DrawMenuBar ();
  52.                 }
  53.             }
  54.             
  55.             else {
  56.                 if (editEnabled) {
  57.                     DisableItem (EditMenu, 0);
  58.                     editEnabled = false;
  59.                     DrawMenuBar ();
  60.                 }
  61.             }
  62.             
  63.             break;
  64.         }
  65.         
  66.         /* Mouse click.  Get the window that the click occurred in, and the
  67.             part of the window.    */
  68.         case mouseDown: {
  69.             switch (evtPart = FindWindow (evt.where, &evtPort)) {
  70.                 /* Click in a desk accessory window.  Pass back to the system.    */
  71.                 case inSysWindow:
  72.                     SystemClick (&evt, evtPort);
  73.                     break;
  74.                 
  75.                 /* Click in menu bar.  Track the mouse and execute selected command,
  76.                     if any.    */
  77.                 case inMenuBar:
  78.                     SetupMenus ();
  79.                     DoMenuCommand (MenuSelect (evt.where));
  80.                     break;
  81.  
  82.                 /* Click in content region.  If the about window is active
  83.                     hide it. */
  84.                 case inContent:
  85.                     ShowHideAbout ();
  86.                     break;
  87.             }
  88.             break;    /* mouseDown */
  89.         }
  90.  
  91.         /*    Key event.  If the command key was down, process as menu item
  92.             selection, otherwise do nothing    */
  93.         case keyDown:
  94.             if (evt.modifiers & cmdKey) {
  95.                 SetupMenus ();
  96.                 DoMenuCommand (MenuKey (evt.message & charCodeMask));
  97.             }
  98.             break;
  99.  
  100.         /* Update a window.    */
  101.         case updateEvt:
  102.             DoUpdate ((WindowPtr) evt.message);
  103.             break;
  104.  
  105.         /* Activate or deactivate a window.    */
  106.         case activateEvt:
  107.             DoActivate ((WindowPtr) evt.message, ((evt.modifiers & activeFlag) != 0));
  108.             break;
  109.  
  110.         /* handle inserts of uninitialized disks    */
  111.         case diskEvt: {
  112.             Point diskInitPt;
  113.  
  114.             SetPt (&diskInitPt, 100, 120);
  115.             
  116.             if (HiWord (evt.message) != noErr) {
  117.                 DILoad ();
  118.                 (void) DIBadMount (diskInitPt, evt.message);
  119.                 DIUnload ();
  120.             }
  121.             break;
  122.         }
  123.     
  124.         /* handle multifinder events (i.e., suspend/resume and mouse moved events).    */
  125.         case osEvent: {
  126.             switch ((evt.message >> 24) & 0x000000ff) { 
  127.                 case suspResEvt:
  128.                     /* Set up system wide event state */
  129.                     Suspended = !((evt.message & suspendMask) != 0);
  130.                     
  131.                     if (!Suspended)
  132.                         DrawMenuBar ();
  133.                         
  134.                     break;
  135.             }
  136.             break;
  137.         }
  138.     }
  139.     
  140.     InitCursor ();
  141. }
  142.  
  143. void DoUpdate (wPtr)
  144.     WindowPtr wPtr;
  145. {
  146.     extern WindowPtr AboutWPtr;
  147.     extern PicHandle AboutPic;
  148.  
  149.     SetPort (AboutWPtr);
  150.     BeginUpdate (AboutWPtr);
  151.     DrawPicture (AboutPic, &AboutWPtr->portRect);
  152.     EndUpdate (AboutWPtr);
  153. }
  154.  
  155. void DoActivate (wPtr, active)
  156.     WindowPtr wPtr;
  157.     Boolean active;
  158. {
  159. }
  160.